home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / WORLDSRC.ZIP / VERBS1.C < prev    next >
C/C++ Source or Header  |  1992-08-13  |  32KB  |  1,447 lines

  1. #define EXTERN extern
  2.  
  3. #include "parame.inc"
  4. #include "variab.h"
  5. #include "arrays.h"
  6.  
  7. /* World C Version 1.00 copyright 1987 J.D.McDonald 
  8.    Use as you like for non-commercial purposes, but please
  9.    leave this note, and document any changes you make as yours */
  10.  
  11.  
  12. vattac()
  13. {
  14.     int             i, spk, cplce, n, plce;
  15.     /*
  16.      * "attach" or "tie"   not "attack" a mess since it involves the wire  
  17.      */
  18.  
  19.     if (dobjs[0] == CABLE && iobj == ANTENN) {
  20.     if (loc != 69)
  21.         spk = 379;
  22.     else if (obloc[GCABLE] == 2000 + ZANTEN || obloc[DCABLE] == 2000 + ZANTEN)
  23.         spk = 381;
  24.     else {
  25.         n = getobj(dobjs[0], doadjs[0]);
  26.         if (n <= 0)
  27.         spk = 70;
  28.         else {
  29.         itsher(n, &cplce);
  30.         if (cplce != 1 && cplce != 3 && cplce != 4)
  31.             spk = 380;
  32.         else {
  33.             obloc[n] = 2000 + ZANTEN;
  34.             spk = 75;
  35.         }
  36.         }
  37.     }
  38.     } else if (dobjs[0] != WIRE)
  39.     spk = 48;
  40.     else if (iobj == TREE || iobj == LOG || iobj == STOOL)
  41.     spk = 204;
  42.     else if (iobj != KNOB && iobj != TOWER)
  43.     spk = 48;
  44.     else {
  45.     itsher(ZWIRE, &plce);
  46.     if (plce == 0)
  47.         spk = 213;
  48.     else if (iobj == TOWER) {
  49.         if (loc != 48)
  50.         spk = 205;
  51.         else {
  52.         spk = 75;
  53.         obloc[ZWIRE] = loc;
  54.         /* -57=177707 octal  */
  55.  
  56.         obimpr[ZWIRE] = (obimpr[ZWIRE] & -57) + 24;
  57.         for (i = 0; i < 6; i++)
  58.             wirelc[i] = 1000;
  59.         }
  60.     } else {
  61.         if (loc != 42)
  62.         spk = 206;
  63.         else if (spcloc == 1) {
  64.         spk = 75;
  65.         obloc[ZWIRE] = loc;
  66.         /* ~56=177707 octal  */
  67.  
  68.         obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 32;
  69.         for (i = 0; i < 6; i++)
  70.             wirelc[i] = 1000;
  71.         } else
  72.         spk = 207;
  73.     }
  74.     }
  75.     speak(spk);
  76. }
  77.  
  78. vattak()
  79. {
  80.     int             spk;
  81.     spk = 286;
  82.     if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8) {
  83.     spk = 306;
  84.     if (pct(33))
  85.         spk = 302;
  86.     else if (pct(50))
  87.         spk = 305;
  88.     } else if (dobjs[0] == GUARD) {
  89.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  90.         spk = 562;
  91.     else if(loc >= 153)
  92.         spk = 561;
  93.         else 
  94.             spk = 251;
  95.     } else if (dobjs[0] == MARTIA && loc >= 27 && loc <= 51)
  96.     spk = 307;
  97.     else if (dobjs[0] == ROBOT || dobjs[0] == FERRET)
  98.     spk = 285;
  99.     speak(spk);
  100. }
  101.  
  102. vbreak()
  103. {
  104.     int             j, hplce, xplce;
  105.     if (iobj != 0 && iobj != HAMMER && iobj != BOULDE) {
  106.     speak(48);
  107.     return;
  108.     }
  109.     if (iobj == HAMMER) {
  110.     itsher(ZHAMME, &hplce);
  111.     if (hplce == 0) {
  112.         speak(329);
  113.         return;
  114.     }
  115.     }
  116.     if (iobj == BOULDE) {
  117.     speak(330);
  118.     return;
  119.     }
  120.     if (dobjs[0] == LOUVER && (loc == 98 || loc == 142)) {
  121.     speak(282);
  122.     obimpr[ZLOUVE] = 9;
  123.     if (iobj == HAMMER)
  124.         obloc[ZHAMME] = 1000;
  125.     return;
  126.     }
  127.     if (dobjs[0] == FERRET || dobjs[0] == ROBOT || dobjs[0] ==
  128.     MARTIA || dobjs[0] == CAT || dobjs[0] == FISH) {
  129.     speak(286);
  130.     return;
  131.     }
  132.     if (dobjs[0] == GUARD) {
  133.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  134.         speak(562);
  135.     else if(loc >= 153)
  136.         speak(561);
  137.         else
  138.             speak(251);
  139.     return;
  140.     }
  141.     j = getobj(dobjs[0], doadjs[0]);
  142.     if (j == -1) {
  143.     speak(70);
  144.     return;
  145.     } else {
  146.     itsher(j, &xplce);
  147.     if (xplce == 0)
  148.         speak(66);
  149.     else if (j > MOVMAX)
  150.         speak(332);
  151.     else if (dobjs[0] == WIRE || dobjs[0] == KNAPSA || dobjs[0] ==
  152.          SHIRT || dobjs[0] == PANTS || dobjs[0] == BOULDE ||
  153.          dobjs[0] == PUCK || dobjs[0] == LATEX || dobjs[0] ==
  154.          NUGGET || dobjs[0] == KNIFE || dobjs[0] == BEAD) {
  155.         speak(48);
  156.         return;
  157.     } else if ((dobjs[0] == KEY || dobjs[0] == SAPPHI || dobjs[0] ==
  158.             DIAMON || dobjs[0] == SPHERE) && iobj != HAMMER)
  159.         speak(385);
  160.     else if (j == ZSEED) {
  161.         if (loc != 131 && loc != 99 && loc != 100) {
  162.         speak(337);
  163.         obimpr[ZSEED] = 0;
  164.         } else if (loc != 100) {
  165.         speak(338);
  166.         obimpr[ZSEED] = 0;
  167.         } else {
  168.         speak(340);
  169.         obimpr[ZSEED] = 3;
  170.         /* seed function here  */
  171.  
  172.         }
  173.         obloc[ZSEED] = 0;
  174.     } else if (j == ZSTATU && loc == 99 && obloc[j] == 99)
  175.         speak(89);
  176.     else if (j == CEGG) {
  177.         speak(480);
  178.         obloc[CEGG] = 0;
  179.         obloc[SCOIN] = loc;
  180.     } else {
  181.         speak(331);
  182.         if (j == GSPHER) {
  183.         speak(333);
  184.         obloc[ZBEAD] = obloc[j];
  185.         }
  186.         if (obloc[j] == 2000 + RSLOT)
  187.         obimpr[RSLOT] = 9;
  188.         obloc[j] = 0;
  189.     }
  190.     }
  191. }
  192.  
  193. vdig()
  194. {
  195.     int             splce, pplce;
  196.     if (dobjs[0] != 0 && dobjs[0] != SHOVEL && dobjs[0] != PITCHF)
  197.     speak(48);
  198.     else if (loc != 73)
  199.     speak(284);
  200.     else {
  201.     itsher(ZSHOVE, &splce);
  202.     itsher(ZPITCH, &pplce);
  203.     if ((dobjs[0] == SHOVEL && splce != 0) ||
  204.         (dobjs[0] == PITCHF && pplce != 0) ||
  205.         (dobjs[0] == 0 && (splce > 0 || pplce > 0))) {
  206.         if (obimpr[RHOLE] != 17)
  207.         speak(283);
  208.         else
  209.         speak(434);
  210.         obimpr[RHOLE] = 17;
  211.     } else if ((dobjs[0] == SHOVEL && splce == 0) || (dobjs[0] ==
  212.                               PITCHF && pplce == 0))
  213.         speak(89);
  214.     else
  215.         speak(234);
  216.     }
  217. }
  218.  
  219.  
  220. vdrink()
  221. {
  222.     int             spk;
  223.     /* pervert!!!!  */
  224.  
  225.     if (dobjs[0] == NPISS) {
  226.     dirty += 1;
  227.     spk = 183;
  228.     }
  229.     /* water is o.k. */
  230.  
  231.     else if (dobjs[0] == WATER) {
  232.     if ((locdat[loc] & 1024) == 1024)
  233.         spk = 184;
  234.     else
  235.         spk = 74;
  236.     } else
  237.     spk = 48;
  238.     speak(spk);
  239. }
  240.  
  241. vdrop()
  242. {
  243.     int             d, i, ambig, ddflg, empty, plce, plural, kkwr, kk, spk;
  244.  
  245.     /* special code for "drop something into bowl" */
  246.  
  247.     if (prepio != 0 && !(prepio == IN && iobj == BOWL)) {
  248.     speak(28);
  249.     return;
  250.     }
  251.     /* convert dobjs(1) (noun) list into list of objects (pointers) */
  252.  
  253.     ambig = !cnvobj();
  254.     if (allflg)
  255.     getall();
  256.     for (i = 0; i < 30; i++) {
  257.     ddflg = 0;
  258.     empty = 1;
  259.     d = dobjs[i];
  260.     if (d == 0)
  261.         continue;
  262.     /* see if it is here */
  263.  
  264.     itsher(d, &plce);
  265.     if (allflg && ((plce != 1 && plce != 2) || d > MOVMAX))
  266.         continue;
  267.     if (dobjs[1] != 0 || allflg)
  268.         speak(odistb[d]);
  269.     plural = (obpprp[d] & 256) == 256;
  270.     if (d > MOVMAX)
  271.         spk = 48;
  272.     else if (plce == 2) {
  273.         spk = 88;
  274.         if (plural)
  275.         spk = 194;
  276.     } else if (d == ZWIRE && plce != 1) {
  277.         for (kkwr = 0; kkwr < 6; kkwr++)
  278.         if (wirelc[kkwr] == 1000)
  279.             wirelc[kkwr] = loc;
  280.         if (obloc[d] == loc && wirelc[5] == loc) {
  281.         for (kkwr = 0; kkwr < 6; kkwr++)
  282.             wirelc[kkwr] = 0;
  283.         }
  284.         spk = 82;
  285.     } else if (plce == 0 || plce == 4 || plce == 5) {
  286.         spk = 89;
  287.         if (plural)
  288.         spk = 195;
  289.     } else if (d == ZSEED && (wrdnum[0] == DROP || wrdnum[0] == THROW)) {
  290.         if (loc == 100) {
  291.         spk = 340;
  292.         obimpr[ZSEED] = 0;
  293.         } else if (loc == 131 || loc == 99) {
  294.         spk = 338;
  295.         obimpr[ZSEED] = 3;
  296.         } else {
  297.         obimpr[ZSEED] = 0;
  298.         spk = 337;
  299.         }
  300.         obloc[ZSEED] = 0;
  301.     } else if (d == CFISH && obloc[d] ==
  302.            (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  303.         spk = 76;
  304.     /*
  305.      * code for knocking the puck out of the arena loc38 is center of
  306.      * bowl, 23-37 are the rim  
  307.          */
  308.  
  309.     else if (iobj == BOWL) {
  310.         if (loc < 32 || loc > 38)
  311.         spk = 156;
  312.         else {
  313.         if (d == RBOULD && loc != 38) {
  314.             itsher(RBOULD, &plce);
  315.             /* marflg[1] tells if martians are there */
  316.  
  317.             if (marflg[1]) {
  318.             speak(157);
  319.             vdead();
  320.             oldloc = 0;
  321.             oldlc2 = 0;
  322.             return;
  323.             } else {
  324.             if (obloc[HPUCK] == 38) {
  325.                 /*
  326.                  * the next line tells if other rim is low or
  327.                  * high 
  328.                              */
  329.  
  330.                 if ((loc & 1) == 1) {
  331.                 /* we shoot the puck out */
  332.  
  333.                 spk = 158;
  334.                 obloc[RBOULD] = 38;
  335.                 obloc[HPUCK] = loc + 3;
  336.                 if (obloc[HPUCK] > 37)
  337.                     obloc[HPUCK] -= 6;
  338.                 } else {
  339.                 spk = 159;
  340.                 obloc[RBOULD] = 38;
  341.                 }
  342.             } else {
  343.                 /* in this  case it settles back in  */
  344.  
  345.                 if ((loc & 1) == 1) {
  346.                 spk = 160;
  347.                 obloc[RBOULD] = loc + 3;
  348.                 if (obloc[RBOULD] > 37)
  349.                     obloc[RBOULD] -= 6;
  350.                 } else {
  351.                 spk = 161;
  352.                 obloc[RBOULD] = 38;
  353.                 }
  354.             }
  355.             /* smash the other items in the bowl  */
  356.  
  357.             for (kk = 1; kk <= MOVMAX; kk++) {
  358.                 if (kk == RBOULD || kk == HPUCK)
  359.                 continue;
  360.                 if (obloc[kk] == 38) {
  361.                 obloc[kk] = 0;
  362.                 empty = 0;
  363.                 }
  364.             }
  365.             }
  366.         } else {
  367.             spk = 75;
  368.             obloc[d] = 38;
  369.             ddflg = 1;
  370.         }
  371.         }
  372.     } else {
  373.         if (d == ZCAT)
  374.         spk = 334;
  375.         else if (d == RBOULD)
  376.         spk = 335;
  377.         else if (d == ZORCHI && loc == 87)
  378.         spk = 432;
  379.         else if (d == ZFLYTR && loc == 87)
  380.         spk = 433;
  381.         else
  382.         spk = 82;
  383.         obloc[d] = loc;
  384.         ddflg = 1;
  385.     }
  386.     if (d == ZLATEX && ddflg == 1)
  387.         obimpr[d] = 337;
  388.     xindnt += 2;
  389.     speak(spk);
  390.     xindnt -= 2;
  391.     if (empty != 1) {
  392.         xindnt += 4;
  393.         speak(162);
  394.         xindnt -= 4;
  395.     }
  396.     }
  397. }
  398.  
  399. veat()
  400. {
  401.     int             d, l, spk, plce;
  402.     /* don't eat shit  */
  403.  
  404.     if (dobjs[0] == NSHIT) {
  405.     dirty += 1;
  406.     spk = 179;
  407.     }
  408.     /* id love for you to do it, but please don't make mama mad  */
  409.  
  410.     else if (dobjs[0] == ME) {
  411.     dirty += 1;
  412.     spk = 183;
  413.     } else {
  414.     d = getobj(dobjs[0], doadjs[0]);
  415.     /* see if its here */
  416.  
  417.     if (d <= 0) {
  418.         speak(48);
  419.         return;
  420.     }
  421.     itsher(d, &plce);
  422.     if (plce <= 0) {
  423.         spk = 66;
  424.         if ((obpprp[d] & 256) == 256)
  425.         spk = 185;
  426.     } else {
  427.         /* poison!   */
  428.  
  429.         if ((obpprp[d] & 8) == 8) {
  430.         if (d == CFISH && obloc[d] ==
  431.             (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5)) {
  432.             speak(76);
  433.             return;
  434.         }
  435.         speak(181);
  436.         oldloc = 0;
  437.         oldlc2 = 0;
  438.         if (d <= MOVMAX)
  439.             obloc[d] = 0;
  440.         vdead();
  441.         return;
  442.         }
  443.         /* it's edible, and delicious   */
  444.  
  445.         else if ((obpprp[d] & 4) == 4) {
  446.         spk = 180;
  447.         if (d <= MOVMAX)
  448.             obloc[d] = 0;
  449.         if (d != BBALL)
  450.             eattim = 0;
  451.         if (d == CEGG) {
  452.             spk = 478;
  453.             obloc[SCOIN] = 1000;
  454.         }
  455.         if (d == LETTUC)
  456.             eattim = 150;
  457.         if (d == BBALL) {
  458.             lpill = 1;
  459.             spk = 522;
  460.             bonus += 5;
  461.             dcombi = (qrand() % 31);
  462.             if (dcombi == 0)
  463.             dcombi = 1;
  464.             l = (qrand() % 31);
  465.             if (l == 0)
  466.             l = 22;
  467.             dcombi = dcombi * 32 + l;
  468.             l = (qrand() % 31);
  469.             if (l == 0)
  470.             l = 3;
  471.             dcombi = dcombi * 32 + l;
  472.                 }
  473.         /* inedible  */
  474.  
  475.         } else
  476.         spk = 182;
  477.     }
  478.     }
  479.     speak(spk);
  480. }
  481.  
  482.  
  483.  
  484. vfill()
  485. {
  486.     int             result, z, z2, spk, i, empty, plce;
  487.     result = 0;
  488.     z = dobjs[0];
  489.     spk = 48;
  490.     if (dobjs[0] == FUNNEL && iobj == WATER) {
  491.     result = 1;
  492.     dobjs[0] = WATER;
  493.     iobj = FUNNEL;
  494.     ioadj = doadjs[0];
  495.     doadjs[0] = 0;
  496.     prepio = IN;
  497.     return (result);
  498.     }
  499.     if (dobjs[0] == TUBE) {
  500.     speak(494);
  501.     return (result);
  502.     }
  503.     /* fill the bag or bucket with water or latex  */
  504.  
  505.     empty = 1;
  506.     if (z == BUCKET) {
  507.     for (i = 1; i <= OBJMAX; i++)
  508.         if (obloc[i] == 2039)
  509.         empty = 0;
  510.     }
  511.     if (z == BUCKET && iobj == LATEX && obloc[ZLATEX] == 66 &&
  512.     prepio == WITH && loc == 66) {
  513.     if (obimpr[ZBUCKE] == 1033)
  514.         spk = 274;
  515.     else if (empty == 0)
  516.         spk = 275;
  517.     else {
  518.         obloc[ZLATEX] = 2000 + ZBUCKE;
  519.         obimpr[ZBUCKE] = 1545;
  520.         obimpr[ZLATEX] = 265;
  521.         spk = 75;
  522.     }
  523.     } else if ((z == BAG && (doadjs[0] == 0 || doadjs[0] == PLASTI)) ||
  524.            (z == BUCKET && doadjs[0] == 0)) {
  525.     if ((prepio == WITH && iobj == WATER) ||
  526.         (((locdat[loc] & 1024) == 1024) && prepio == 0
  527.          && iobj == 0)) {
  528.         z2 = ZBUCKE;
  529.         if (z == BAG)
  530.         z2 = PLBAG;
  531.         itsher(z2, &plce);
  532.         if (plce == 0)
  533.         spk = 73;
  534.         else if ((locdat[loc] & 1024) != 1024 && ((obloc[ZBUCKE]
  535.               != loc && obloc[ZBUCKE] != 1000) || obimpr[ZBUCKE]
  536.                               != 1033))
  537.         spk = 74;
  538.         else if (empty == 1) {
  539.         if (z2 == PLBAG)
  540.             obimpr[z2] = 2697;
  541.         else
  542.             obimpr[z2] = 1033;
  543.         spk = 75;
  544.         obloc[z2] = 1000;
  545.         } else
  546.         spk = 275;
  547.     } else if (iobj == 0)
  548.         spk = 278;
  549.     }
  550.     speak(spk);
  551.     return (result);
  552. }
  553.  
  554. vfuck()
  555. {
  556.     if (dirty < 10)
  557.     speak(495);
  558.     else if (dirty > 20)
  559.     speak(497);
  560.     else
  561.     speak(496);
  562. }
  563.  
  564.  
  565. vget()
  566. {
  567.     int             spk, result;
  568.     result = 0;
  569.     spk = 0;
  570.     if (prepdo == IN && dobjs[0] == CHAIR && (loc == 166 ||
  571.                           loc == 175)) {
  572.     spcloc = 2;
  573.     spk = 510;
  574.     }
  575.     /* get up is a joke  */
  576.  
  577.     else if (prepdo == UP) {
  578.     if (dobjs[0] == 0 && spcloc == 2) {
  579.         spk = 511;
  580.         spcloc = 0;
  581.     } else
  582.         spk = 208;
  583.     }
  584.     /* get on or off glass plate   */
  585.  
  586.     else if (dobjs[0] == GLASS && (doadjs[0]
  587.                  == 0 || doadjs[0] == GLASS) && dobjs[1] == 0) {
  588.     if (prepdo == OFF && spcloc == 1) {
  589.         spcloc = 0;
  590.         spk = 75;
  591.     } else if (prepdo == ON && spcloc == 0) {
  592.         spcloc = 1;
  593.         spk = 75;
  594.     }
  595.     }
  596.     /* get something  means take it */
  597.  
  598.     else if (prepdo == ON || prepdo == OFF)
  599.     spk = 71;
  600.     else
  601.     result = 1;
  602.     /* this results in calling vtake  */
  603.  
  604.     if (spk != 0)
  605.     speak(spk);
  606.     return (result);
  607. }
  608.  
  609. vgive()
  610. {
  611.     int             spk, ij, iplce, dj, dplce;
  612.     spk = 0;
  613.     if (iobj == ME)
  614.     spk = 445;
  615.     else if (iobj == GUARD) {
  616.     if (loc == guardl || loc == 171 || (chaset != 0 &&
  617.                         chaset <= 9))
  618.         spk = 562;
  619.     else
  620.         spk = 251;
  621.     } else if (iobj == MARTIA) {
  622.     if (martim == 7 && loc >= 27 && loc <= 51)
  623.         spk = 446;
  624.     else
  625.         spk = 168;
  626.     } else if (iobj == FERRET && !(loc == 131 || loc == 99
  627.                    || loc == 100))
  628.     spk = 447;
  629.     else if (iobj != CAT && iobj != BIRD && iobj != BEES &&
  630.          iobj != FROG && iobj != ROBOT)
  631.     spk = 448;
  632.     else {
  633.     ij = getobj(iobj, ioadj);
  634.     if (iobj == BIRD && ij < 0)
  635.         ij = YBIRD;
  636.     itsher(ij, &iplce);
  637.     if (iplce == 0) {
  638.         if (iobj == CAT)
  639.         spk = 449;
  640.         else if (iobj == BEES)
  641.         spk = 450;
  642.         else if (iobj == FROG)
  643.         spk = 451;
  644.         else if (iobj == ROBOT)
  645.         spk = 452;
  646.         else if (iobj == BIRD)
  647.         spk = 453;
  648.     } else {
  649.         if (iobj == FROG)
  650.         spk = 454;
  651.         else if (iobj == BIRD)
  652.         spk = 455;
  653.     }
  654.     }
  655.     if (spk != 0) {
  656.     speak(spk);
  657.     return;
  658.     }
  659.     dj = getobj(dobjs[0], doadjs[0]);
  660.     if (dj < 0)
  661.     spk = 70;
  662.     else if (dj == 0)
  663.     spk = 28;
  664.     else {
  665.     itsher(dj, &dplce);
  666.     if (dplce == 0) {
  667.         if ((obimpr[dj] & 256) != 0)
  668.         spk = 185;
  669.         else
  670.         spk = 89;
  671.     } else if (obloc[dj] == 2000 + ij)
  672.         spk = 456;
  673.     else if (dj > MOVMAX)
  674.         spk = odistb[dj + 1] - 1;
  675.     else if (dplce > 3)
  676.         spk = 458;
  677.     else;
  678.     }
  679.     if (spk != 0) {
  680.     speak(spk);
  681.     return;
  682.     }
  683.     /* at this point you have it, and someone is here to take it. */
  684.  
  685.     if (iobj == CAT) {
  686.     if (dobjs[0] == FISH) {
  687.         spk = 459;
  688.         obloc[dj] = 0;
  689.     } else if ((obpprp[dj] & 12) != 0)
  690.         spk = 460;
  691.     else
  692.         spk = 461;
  693.     } else if (iobj == FERRET) {
  694.     if (dobjs[0] == EGG || dobjs[0] == FISH || dobjs[0] == CAT) {
  695.         spk = 462;
  696.         obloc[dj] = 0;
  697.     } else if ((obpprp[dj] & 12) != 0)
  698.         spk = 464;
  699.     else {
  700.         spk = 463;
  701.         obloc[dj] = 0;
  702.     }
  703.     } else if (iobj == BEES) {
  704.     if (iobj != ORCHID && iobj != FLYTRA)
  705.         spk = 465;
  706.     else if (iobj == ORCHID) {
  707.         spk = 432;
  708.         obloc[dj] = loc;
  709.     } else {
  710.         spk = 433;
  711.         obloc[dj] = loc;
  712.     }
  713.     } else if (iobj == ROBOT) {
  714.     if (obloc[ZCART] != RSLOT + 2000 && obloc[CCART] != RSLOT + 2000)
  715.         spk = 466;
  716.     else if (obw3[dj] / 256 > 1 || (obw3[dj] & 255) > 2)
  717.         spk = 352;
  718.     else {
  719.         spk = 345;
  720.         obloc[dj] = 2000 + ZROBOT;
  721.     }
  722.     }
  723.     speak(spk);
  724. }
  725.  
  726. vhelp()
  727. {
  728.     speak(105);
  729. }
  730.  
  731.  
  732. vkiss()
  733. {
  734.     int             result, spk, cplce;
  735.     /* if vkiss ends up 1, call vpush */
  736.  
  737.     result = 0;
  738.     if (dobjs[0] == FROG && loc == 67)
  739.     spk = 468;
  740.     else if (dobjs[0] == GUARD) {
  741.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  742.         spk = 562;
  743.     else if(loc >= 153)
  744.         spk = 561;
  745.         else 
  746.             spk = 251;
  747.     } else if (dobjs[0] == FERRET && (loc == 131 || loc == 100 || loc == 99))
  748.     spk = 469;
  749.     else if (dobjs[0] == CAT) {
  750.     itsher(ZCAT, &cplce);
  751.     if (cplce != 0)
  752.         spk = 470;
  753.     else
  754.         spk = 449;
  755.     } else if (dobjs[0] == ME)
  756.     spk = 471;
  757.     else if (dobjs[0] == BIRD || dobjs[0] == BEES || dobjs[0] == ROBOT)
  758.     spk = 472;
  759.     else
  760.     result = 1;
  761.     if (result == 0)
  762.     speak(spk);
  763.     return (result);
  764. }
  765.  
  766. vlocks()
  767. {
  768.     int             n, plce, spk;
  769.     n = getobj(dobjs[0], doadjs[0]);
  770.     if (n < 0)
  771.     spk = 70;
  772.     else if (n == 0)
  773.     spk = 28;
  774.     else if ((obpprp[n] & 512) != 512 && n != ZBOX)
  775.     spk = 233;
  776.     else {
  777.     itsher(n, &plce);
  778.     if (plce <= 0) {
  779.         if (dobjs[0] == DOOR)
  780.         spk = 225;
  781.         else
  782.         spk = 66;
  783.     } else if (n == ZBOX)
  784.         spk = 389;
  785.     else if (n == ODOOR || n == PDOOR)
  786.         spk = 524;
  787.     else if (prepio == WITH && iobj == KEY) {
  788.         if (n == RDOOR || (n == MDOOR && loc == 41))
  789.         spk = 235;
  790.         else if (n == MDOOR || n == GDOOR) {
  791.                 if(obloc[CKEY] == 1000 || obloc[CKEY] == 3000) { 
  792.              if (wrdnum[0] == LOCK)
  793.                 obimpr[n] |= 4;
  794.             else
  795.                 obimpr[n] = (obimpr[n] & ~4);
  796.             /* ~4=177773 octal */
  797.         spk = 75;
  798.                 } else
  799.                 spk = 104;
  800.         } else
  801.         spk = 48;
  802.     } else
  803.         spk = 234;
  804.     }
  805.     speak(spk);
  806. }
  807.  
  808.     static   char   strng3[] = "The left dial is set to     and the right to    .";
  809.     static   char   strng4[] = "are     for the left and     for the right.";
  810. vlooks()
  811. /*
  812.  * look or examine 
  813.  */
  814.  
  815. {
  816.     char            cnum[4];
  817.  
  818.     int             kk, zplce, spk, kkwr, lwire, n, plce, u, empty;
  819.  
  820.     if ((prepdo == THROUG && dobjs[0] == TELESC && wrdnum[0] ==
  821.      LOOK) || (wrdnum[0] == EXAMIN && dobjs[0] == PLANET &&
  822.            prepio == WITH && iobj == TELESC)) {
  823.     if (loc >= 175 && loc <= 181)
  824.         spk = loc + 326;
  825.     else if (loc == 184 || loc == 187)
  826.         spk = 507;
  827.     else
  828.         spk = 48;
  829.     speak(spk);
  830.     return;
  831.     }
  832.     if ((loc >= 43 && loc <= 45) && (dobjs[0] == HOLE || dobjs[0]
  833.                      == DOOR)) {
  834.     if (daytim == 1)
  835.         speak(173);
  836.     else
  837.         speak(174);
  838.     return;
  839.     }
  840.     if (dobjs[0] == HOUSE && (doadjs[0] == 0 || doadjs[0] == DOLL)
  841.     && prepdo == IN) {
  842.     if (loc != 132)
  843.         speak(481);
  844.     else if (obimpr[CEGG] > 4096) {
  845.         speak(479);
  846.         obloc[CEGG] = 132;
  847.     } else
  848.         speak(480);
  849.     return;
  850.     }
  851.     /* you can't examine things at night unless they glow  */
  852.  
  853.     if (daytim == 0 && dobjs[0] != SPHERE) {
  854.     speak(120);
  855.     return;
  856.     }
  857.     if (wrdnum[0] == EXAMIN)
  858.     prepdo = AT;
  859.     if (dobjs[0] == TELESC) {
  860.     if ((loc >= 175 && loc <= 181) || loc == 184 || loc == 187)
  861.         speak(534);
  862.     else
  863.         speak(535);
  864.     return;
  865.     }
  866.     /* if you look behind horsetails, there is a cave  */
  867.  
  868.     if (prepio == 0 && prepdo == BEHIND && loc == 169 &&
  869.     dobjs[0] == CABINE) {
  870.     speak(523);
  871.     return;
  872.     }
  873.     if (prepio == 0 && prepdo == BEHIND && loc == 24) {
  874.     if (dobjs[0] == HORSET) {
  875.         speak(119);
  876.         horflg = 1;
  877.         return;
  878.     } else if (dobjs[0] == WATERF) {
  879.         speak(493);
  880.         horflg = 1;
  881.         return;
  882.     }
  883.     }
  884.     /*
  885.      * in the (hockey) bowl you can only see if something is there, not what
  886.      * it is  
  887.      */
  888.  
  889.     if (prepdo == IN && dobjs[0] == BOWL && (loc >= 32 && loc <= 37)) {
  890.     empty = 1;
  891.     for (kk = 1; kk <= MOVMAX; kk++)
  892.         if (obloc[kk] == 38)
  893.         empty = 0;
  894.     if (empty == 1)
  895.         speak(7);
  896.     else
  897.         speak(163);
  898.     return;
  899.     }
  900.     if ((loc == 28) && (dobjs[0] == STOOLS || dobjs[0] == STOOL ||
  901.          dobjs[0] == BOWL) && (doadjs[0] == 0 || doadjs[0] == CERAMI)) {
  902.     speak(176);
  903.     return;
  904.     }
  905.     /* various martian things  */
  906.  
  907.     if (loc == 42 && (dobjs[0] == STOOLS || dobjs[0] == BOWL)) {
  908.     speak(177);
  909.     spcloc = 0;
  910.     return;
  911.     }
  912.     if (loc == 30 && (dobjs[0] == BUILDI || dobjs[0] == WINDOW)
  913.     && prepdo == IN) {
  914.     speak(174);
  915.     return;
  916.     }
  917.     if (dobjs[0] == CACTUS && loc == 82 && wrdnum[0] == EXAMIN) {
  918.     if (pct(25) && (cactsc & 2) == 0) {
  919.         speak(371);
  920.         cactsc += 2;
  921.         if (cactsc == 3)
  922.         speak(439);
  923.     } else if ((cactsc & 1) == 0) {
  924.         speak(370);
  925.         cactsc += 1;
  926.         if (cactsc == 3)
  927.         speak(439);
  928.     } else
  929.         speak(237);
  930.     return;
  931.     }
  932.     if (dobjs[0] == DIAL) {
  933.     itsher(ZBOX, &zplce);
  934.     if (zplce == 0)
  935.         speak(388);
  936.     else {
  937.         numcvt(dial1, cnum);
  938.         strng3[24] = cnum[1];
  939.         strng3[25] = cnum[2];
  940.         strng3[26] = cnum[3];
  941.         numcvt(dial2, cnum);
  942.         strng3[45] = cnum[1];
  943.         strng3[46] = cnum[2];
  944.         strng3[47] = cnum[3];
  945.         linout(strng3, 49);
  946.     }
  947.     return;
  948.     }
  949.     /*
  950.      * special code for anything other than "look at object" or "look in
  951.      * container" gotes above here 
  952.      */
  953.  
  954.     n = getobj(dobjs[0], doadjs[0]);
  955.     if (prepio != 0 || (prepdo != AT && prepdo != IN)) {
  956.     speak(94);
  957.     return;
  958.     }
  959.     if (n == 0) {
  960.     speak(95);
  961.     return;
  962.     } else if (n < 0) {
  963.     speak(70);
  964.     return;
  965.     }
  966.     itsher(n, &plce);
  967.     lwire = 0;
  968.     /* special code for wire in several places at once  */
  969.  
  970.     if (n == ZWIRE) {
  971.     for (kkwr = 0; kkwr < 6; kkwr++)
  972.         if (wirelc[kkwr] == loc)
  973.         lwire = 1;
  974.     }
  975.     if (plce < 1 && !lwire) {
  976.     if ((obpprp[n] & 256) == 256)
  977.         speak(185);
  978.     else
  979.         speak(66);
  980.     return;
  981.     }
  982.     if (plce < 1 && n == ZWIRE && lwire) {
  983.     speak(215);
  984.     return;
  985.     }
  986.     /* the generic "look at" processor  */
  987.  
  988.     if (prepdo == AT) {
  989.     u = (obimpr[n] / 64 % 8);
  990.     if (u == 0) {
  991.         if ((obpprp[n] & 256) == 256)
  992.         speak(193);
  993.         else
  994.         speak(96);
  995.     }
  996.     /* zzzzzzap if not standing on glass while looking at knob  */
  997.  
  998.     else if ((n == ZSTOOL || n == ZKNOB) && spcloc == 1)
  999.         speak(237);
  1000.     else if (n == ZANTEN) {
  1001.         if (obloc[DCABLE] == 2000 + ZANTEN) {
  1002.         speak(odistb[n] + 1);
  1003.         obimpr[DCABLE] = 137;
  1004.         } else if (obloc[GCABLE] == 2000 + ZANTEN)
  1005.         speak(odistb[n] + 2);
  1006.         else
  1007.         speak(odistb[n] + 3);
  1008.     } else {
  1009.         if ((n == MMAP || n == NNEWS || n == TMACH || n == NNOTE
  1010.          ) && loc >= 153 && lpill == 1)
  1011.         u += 1;
  1012.         speak(odistb[n] + u);
  1013.         if (n == NNOTE && lpill == 1)
  1014.         nreadx();
  1015.         if (n == ZSCREE && obimpr[n] == 145 && loc == 146)
  1016.         robdsc();
  1017.         if (dobjs[0] == BOX) {
  1018.         numcvt(dial1, cnum);
  1019.         strng3[24] = cnum[1];
  1020.         strng3[25] = cnum[2];
  1021.         strng3[26] = cnum[3];
  1022.         numcvt(dial2, cnum);
  1023.         strng3[45] = cnum[1];
  1024.         strng3[46] = cnum[2];
  1025.         strng3[47] = cnum[3];
  1026.         linout(strng3, 49);
  1027.         }
  1028.         if (dobjs[0] == FILM && obimpr[ZFILM] == 201) {
  1029.         wwflag = 1;
  1030.         speak(odistb[fimage]);
  1031.         wwflag = 0;
  1032.         outst2[0] |= 32;
  1033.                 outst2[kmax] = '.';
  1034.                 outst2[kmax+1] = '\0';
  1035.         linout(outst2, kmax+1);
  1036.         if (fimage == ZBOX) {
  1037.             speak(404);
  1038.             numcvt(dial1x, cnum);
  1039.             strng4[4] = cnum[1];
  1040.             strng4[5] = cnum[2];
  1041.             strng4[6] = cnum[3];
  1042.             numcvt(dial2x, cnum);
  1043.             strng4[25] = cnum[1];
  1044.             strng4[26] = cnum[2];
  1045.             strng4[27] = cnum[3];
  1046.             linout(strng4, 49);
  1047.         }
  1048.         }
  1049.         /*
  1050.          * special code for flags set by looking at or in object goes
  1051.          * below here  
  1052.              */
  1053.  
  1054.         if (n == PPHOTO)
  1055.         horflg = 1;
  1056.     }
  1057.     }
  1058.     if (obpprp[n] / 2048 != 0)
  1059.     xcontn(n);
  1060.     else if (prepdo == IN)
  1061.     speak(97);
  1062.     return;
  1063. }
  1064.  
  1065. vopen()
  1066. {
  1067.     int             spk, n, plce;
  1068.     if (prepdo != 0 && prepio != 0)
  1069.     spk = 21;
  1070.     /* there is no door on the bar to open or close  */
  1071.  
  1072.     else if ((loc == 30 || loc == 42) && dobjs[0] == DOOR)
  1073.     spk = 224;
  1074.     /* open doors or containers  */
  1075.  
  1076.     else {
  1077.     n = getobj(dobjs[0], doadjs[0]);
  1078.     if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  1079.                  (loc >= 176 && loc <= 181)))
  1080.         n = BDOOR;
  1081.     if (n < 0)
  1082.         spk = 70;
  1083.     else if (n == 0)
  1084.         spk = 66;
  1085.     /* if they can be opened */
  1086.  
  1087.     else if ((obpprp[n] % 2) != 1) {
  1088.         if (obpprp[n] / 2048 != 0)
  1089.         spk = 254;
  1090.         else
  1091.         spk = 230;
  1092.     } else {
  1093.         itsher(n, &plce);
  1094.         if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  1095.                      (loc >= 176 && loc <= 181)))
  1096.         plce = 5;
  1097.         if (plce <= 0) {
  1098.         if (dobjs[0] == DOOR)
  1099.             spk = 225;
  1100.         else
  1101.             spk = 66;
  1102.         }
  1103.         /* and aren't locked ,but are closed  */
  1104.  
  1105.         else if ((obimpr[n] & 4) == 4) {
  1106.         if (n == ZBOX)
  1107.             spk = 389;
  1108.         else
  1109.             spk = 228;
  1110.         } else if ((obimpr[n] & 2) == 0)
  1111.         spk = 226;
  1112.         else if (dobjs[0] == DOOR && (loc <= 180 && loc >= 176))
  1113.         spk = 546;
  1114.         else if (dobjs[0] == CABINE && adverb != CAREFU && adverb !=
  1115.              QUIETL)
  1116.         spk = 553;
  1117.         else {
  1118.         spk = 231;
  1119.         obimpr[n] = (obimpr[n] & ~2);
  1120.         /* ~2=177775 octal */
  1121.  
  1122.         if (n == RDOOR || n == MDOOR || n == GDOOR || n ==
  1123.             ODOOR || n == BDOOR)
  1124.             obimpr[n] += 8;
  1125.         if (n == ZDESK && dial1x == -1) {
  1126.             /*
  1127.              * establish the proper setting of the dials when the box
  1128.              * is first seen 
  1129.                      */
  1130.  
  1131.             dial1x = (qrand() % 999) + 1;
  1132.             dial2x = (qrand() % 999) + 1;
  1133.         }
  1134.         }
  1135.     }
  1136.     }
  1137.     speak(spk);
  1138.     if (spk == 553)
  1139.     vdead();
  1140. }
  1141.  
  1142.  
  1143. vpick()
  1144. {
  1145.     int             result;
  1146.     result = 0;
  1147.     /* pick up means take  */
  1148.  
  1149.     if (prepdo == UP) {
  1150.     prepdo = 0;
  1151.     result = 1;
  1152.     }
  1153.     /* this results in calling take  */
  1154.  
  1155.     else if (dobjs[0] == NLOCK && loc == 47)
  1156.     speak(235);
  1157.     else
  1158.     speak(95);
  1159.     return(result);
  1160. }
  1161.  
  1162.  
  1163. vpiss()
  1164. {
  1165.     dirty += 1;
  1166.     {
  1167.     if (loc == 74 && (obimpr[ZVINE] & 56) == 8 && (dobjs[0]
  1168.                     == 0 || dobjs[0] == VINE)) {
  1169.         speak(301);
  1170.         obimpr[ZVINE] += 8;
  1171.     } else if (dirty >= 5 && dirty < 10)
  1172.         speak(40);
  1173.     else if (dirty >= 10) {
  1174.         if (obloc[LPANT] == 3000 || obloc[RPANT] == 3000)
  1175.         speak(41);
  1176.         else
  1177.         speak(42);
  1178.     }
  1179.     }
  1180. }
  1181.  
  1182.  
  1183. vpour()
  1184. {
  1185.     int             result, bplce, pplce, n, plce;
  1186.     result = 0;
  1187.     /* if result set = 1, then call vput  */
  1188.  
  1189.  
  1190.     if (wrdnum[0] == QWATER) {
  1191.     prepio = ON;
  1192.     iobj = dobjs[0];
  1193.     ioadj = doadjs[0];
  1194.     dobjs[0] = WATER;
  1195.     doadjs[0] = 0;
  1196.     }
  1197.     if (dobjs[0] == DEET && prepio == ON && (iobj == ME
  1198.                       || (iobj == VINE && loc == 74))) {
  1199.     itsher(ZDEET, &plce);
  1200.     if (plce == 0)
  1201.         speak(66);
  1202.     else {
  1203.         speak(75);
  1204.         obimpr[ZDEET] = 28762;
  1205.         obloc[ZDEET] = 0;
  1206.     }
  1207.     return (result);
  1208.     }
  1209.     if ((dobjs[0] == DEET || dobjs[0] == METOL || dobjs[0] == HYPO)
  1210.     && iobj == FUNNEL) {
  1211.     wrdnum[0] = PUT;
  1212.     prepio = IN;
  1213.     result = 1;
  1214.     return (result);
  1215.     }
  1216.     if (iobj != 0 && iobj != POLE) {
  1217.     n = getobj(iobj, ioadj);
  1218.     if (n >= 0) {
  1219.         itsher(n, &plce);
  1220.     }
  1221.     if (iobj == FUNNEL && n < 0) {
  1222.         speak(70);
  1223.         return (result);
  1224.     }
  1225.     if (n <= 0 || plce == 0) {
  1226.         speak(48);
  1227.         return (result);
  1228.     }
  1229.     }
  1230.     itsher(ZBUCKE, &bplce);
  1231.     itsher(PLBAG, &pplce);
  1232.     if (dobjs[0] == WATER) {
  1233.     if (bplce != 0 && obimpr[ZBUCKE] == 1033) {
  1234.         if (iobj == FUNNEL) {
  1235.         if (n == LFUNNE || n == RFUNNE) {
  1236.             speak(402);
  1237.             if (obimpr[RLIGHT] != 73) {
  1238.             speak(400);
  1239.             obimpr[RLIGHT] = 73;
  1240.             obimpr[GLIGHT] = 73;
  1241.             }
  1242.             machst |= machst;
  1243.             return(result);
  1244.         } else {
  1245.             if ((machst & 2) == 0)
  1246.             speak(397);
  1247.             machst |= 2;
  1248.             obimpr[ZINDIC] = 145;
  1249.             if ((machst & 16) != 0 && (machst & 1) == 0 &&
  1250.                                        obimpr[RLIGHT] == 73) {
  1251.             speak(399);
  1252.             obimpr[RLIGHT] = 145;
  1253.             obimpr[GLIGHT] = 145;
  1254.             }
  1255.         }
  1256.         } else if (loc != 74 || (obimpr[ZVINE] & 56) != 8)
  1257.         speak(247);
  1258.         else {
  1259.         speak(301);
  1260.         obimpr[ZVINE] = obimpr[ZVINE] + 8;
  1261.         }
  1262.         obimpr[ZBUCKE] = 1545;
  1263.     } else if (pplce != 0 && obimpr[PLBAG] == 2697)
  1264.         speak(248);
  1265.     else
  1266.         speak(48);
  1267.     } else if (dobjs[0] == LATEX && obloc[ZLATEX] == 2000 + ZBUCKE
  1268.            && bplce != 0 && (obimpr[ZLATEX] & 56) == 8) {
  1269.     if (loc != 76 || iobj != POLE) {
  1270.         speak(279);
  1271.         obimpr[ZLATEX] = obimpr[ZLATEX] + 72;
  1272.     } else {
  1273.         speak(75);
  1274.         obimpr[ZLATEX] = obimpr[ZLATEX] + 80;
  1275.     }
  1276.     obloc[ZLATEX] = loc;
  1277.     } else
  1278.     speak(48);
  1279.     return (result);
  1280. }
  1281.  
  1282.  
  1283. vpush()
  1284. {
  1285.     int             result, numbr, ndo, nio, spk, xfilm;
  1286.     result = 0;
  1287.     /* push is also touch   */
  1288.  
  1289.     if ((loc == 165 || loc == 173) && dobjs[0] > 9999) {
  1290.     numbr = dobjs[0] - 10000;
  1291.     if ((loc == 165 && numbr > 30) || (loc == 173 && numbr > 99))
  1292.         speak(532);
  1293.     else if (loc == 165) {
  1294.         pbstat = (pbstat & 1023) * 32 + numbr;
  1295.         if (pbstat == dcombi) {
  1296.         speak(530);
  1297.         /* ~4=177773 octal */
  1298.  
  1299.         obimpr[ODOOR] = (obimpr[ODOOR] & ~4);
  1300.         } else
  1301.         speak(238);
  1302.     } else
  1303.         speak(238);
  1304.     return (result);
  1305.     }
  1306.     if (dobjs[0] == CACTUS && loc == 82) {
  1307.     if (pct(25) && (cactsc & 2) == 0) {
  1308.         speak(371);
  1309.         cactsc = cactsc + 2;
  1310.         if (cactsc == 3)
  1311.         speak(439);
  1312.     } else if ((cactsc & 1) == 0) {
  1313.         speak(370);
  1314.         cactsc = cactsc + 1;
  1315.         if (cactsc == 3)
  1316.         speak(439);
  1317.     } else
  1318.         speak(237);
  1319.     return (result);
  1320.     }
  1321.     if (dobjs[0] == GUARD) {
  1322.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  1323.         speak(562);
  1324.     else if(loc >= 153)
  1325.         speak(561);
  1326.         else
  1327.             speak(251);
  1328.     return (result);
  1329.     }
  1330.     ndo = 0;
  1331.     nio = 0;
  1332.     if (dobjs[0] != 0)
  1333.     ndo = getobj(dobjs[0], doadjs[0]);
  1334.     if (iobj != 0)
  1335.     nio = getobj(iobj, ioadj);
  1336.     /*
  1337.      * unlocking the door to warehouse by touching wire to it if wire is
  1338.      * connected to knob in bar 
  1339.      */
  1340.  
  1341.     if ((ndo == MDIMPL && nio == ZWIRE && prepio == WITH) ||
  1342.     (ndo == ZWIRE && nio == MDIMPL && prepio == TO) &&
  1343.     loc == 47) {
  1344.     if (obloc[ZWIRE] != loc && wirelc[0] != loc && wirelc[1] !=
  1345.         loc && wirelc[2] != loc && wirelc[3] != loc &&
  1346.         wirelc[4] != loc && wirelc[5] != 1000 && obloc[ZWIRE]
  1347.         != 1000)
  1348.         spk = 213;
  1349.     /* first test is for connection to knob */
  1350.  
  1351.     else if (((obimpr[ZWIRE] / 8) % 8) == 4 && (wirelc[5] == 1000
  1352.                             || wirelc[5] == loc)) {
  1353.         spk = 238;
  1354.         /* ~4=177773 octal */
  1355.  
  1356.         obimpr[RDOOR] = (obimpr[RDOOR] & ~4);
  1357.     } else
  1358.         spk = 237;
  1359.     } else if ((ndo == ZKNOB || nio == ZKNOB) && loc == 42 && spcloc != 1)
  1360.     spk = 207;
  1361.     else if (ndo == ZLOUVE && (loc == 98 || loc == 142) &&
  1362.          obimpr[ZLOUVE] == 1) {
  1363.     spk = 282;
  1364.     obimpr[ZLOUVE] = 9;
  1365.     } else if (dobjs[0] == BUTTON) {
  1366.     if (ndo == -1)
  1367.         spk = 70;
  1368.     else if (ndo == SBUTTO && loc == 146) {
  1369.         locdat[144] |= 16;
  1370.         locdat[145] |= 16;
  1371.         locdat[147] |= 16;
  1372.         locdat[148] |= 16;
  1373.         locdat[150] |= 16;
  1374.         spk = 238;
  1375.     } else if (ndo == RBUTTO && loc == 146) {
  1376.         speak(383);
  1377.         result = 1;
  1378.         return(result);
  1379.     } else if (ndo == HBUTTO && loc == 146) {
  1380.         if (easttm == 0)
  1381.         easttm = 1;
  1382.         spk = 238;
  1383.     } else if (ndo == TBUTTO && loc == 146) {
  1384.         if (easttm == 51)
  1385.         easttm = 52;
  1386.         spk = 238;
  1387.     } else if (ndo == GBUTTO && loc == 169) {
  1388.         if (adverb == TWICE && obimpr[HMURAL] != 209) {
  1389.         spk = 525;
  1390.         obimpr[HMURAL] = 209;
  1391.         bonus = bonus + 5;
  1392.         chaset = 1;
  1393.         oldlc2 = 0;
  1394.         oldloc = 0;
  1395.         } else
  1396.         spk = 238;
  1397.     } else if (ndo == RDBUTT && loc == 143) {
  1398.         if ((machst & 51) != 18)
  1399.         spk = 237;
  1400.         else {
  1401.         speak(398);
  1402.         xfilm = (filmtm % 1000);
  1403.         if (xfilm >= 3 && xfilm <= 6 && filmtm < 2000 && machst == 30) {
  1404.             if (filmst == 0)
  1405.             obimpr[ZFILM] = obimpr[ZFILM] + 64;
  1406.             else
  1407.             obimpr[ZFILM] = obimpr[ZFILM] + 128;
  1408.         } else if ((machst & 12) != 12)
  1409.             obimpr[ZFILM] = obimpr[ZFILM] + 192;
  1410.         else;
  1411.         obloc[ZFILM] = 2000 + ZHOPPE;
  1412.         machst = 33;
  1413.         return (result);
  1414.         }
  1415.     } else if (loc == 134 && (ndo == VBUTTO || ndo == OBUTTO ||
  1416.                   ndo == WBUTTO || ndo == BBUTTO)) {
  1417.         if (obloc[GDISC] == 2000 + ZRECES && rvtim != 2)
  1418.         spk = 411;
  1419.         else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2 &&
  1420.              obloc[GCABLE] != 2000 + ZANTEN)
  1421.         spk = 421;
  1422.         else if (obloc[GDISC] == 2000 + ZRECES && rvtim == 2) {
  1423.         if (ndo == VBUTTO) {
  1424.             spk = 415;
  1425.             result = 2;
  1426.         } else if (ndo == OBUTTO) {
  1427.             spk = 416;
  1428.             result = 3;
  1429.         } else if (ndo == BBUTTO) {
  1430.             spk = 417;
  1431.             result = 4;
  1432.         } else {
  1433.             spk = 418;
  1434.             result = 5;
  1435.         }
  1436.         } else
  1437.         spk = 238;
  1438.     } else
  1439.         spk = 419;
  1440.     } else
  1441.     spk = 236;
  1442.     speak(spk);
  1443.     return (result);
  1444. }
  1445.  
  1446.  
  1447.